Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 06b4fba6031c3bc96826363665fac78938fbcfc4


Parents : c5ed792
Author : Mark Qvist <mark@unsigned.io>
Date : 2025-01-09T14:46:13+01:00

Added noise floor monitoring and reporting to host

Changes

3 files changed, 33 insertions(+), 1 deletions(-)

M Config.h +3
M Utilities.h +5 -1

Diff

diff --git a/Config.h b/Config.h
index 903fff8..0a2cef2 100644
--- a/Config.h
+++ b/Config.h
@@ -95,6 +95,7 @@
#define CSMA_CW_PER_BAND_WINDOWS 15
#define CSMA_BAND_1_MAX_AIRTIME 7
#define CSMA_BAND_N_MIN_AIRTIME 85
+ #define CSMA_INFR_THRESHOLD_DB 12
int csma_slot_ms = CSMA_SLOT_MIN_MS;
unsigned long difs_ms = CSMA_SIFS_MS + 2*csma_slot_ms;
unsigned long difs_wait_start = -1;
@@ -131,6 +132,8 @@
uint8_t model = 0x00;
uint8_t hwrev = 0x00;
+ #define NOISE_FLOOR_SAMPLES 16
+ int noise_floor = -292;
int current_rssi = -292;
int last_rssi = -292;
uint8_t last_rssi_raw = 0x00;

diff --git a/RNode_Firmware.ino b/RNode_Firmware.ino
index 0d0584b..12f6df0 100644
--- a/RNode_Firmware.ino
+++ b/RNode_Firmware.ino
@@ -1191,6 +1191,30 @@ void serial_callback(uint8_t sbyte) {
bool medium_free() { update_modem_status(); return !dcd; }
+bool noise_floor_sampled = false;
+int noise_floor_sample = 0;
+int noise_floor_buffer[NOISE_FLOOR_SAMPLES] = {0};
+void update_noise_floor() {
+ #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
+ if (!dcd) {
+ if (!noise_floor_sampled || current_rssi < noise_floor + CSMA_INFR_THRESHOLD_DB) {
+ noise_floor_buffer[noise_floor_sample] = current_rssi;
+ noise_floor_sample = noise_floor_sample+1;
+ if (noise_floor_sample >= NOISE_FLOOR_SAMPLES) {
+ noise_floor_sample %= NOISE_FLOOR_SAMPLES;
+ noise_floor_sampled = true;
+ }
+
+ if (noise_floor_sampled) {
+ noise_floor = 0;
+ for (int ni = 0; ni < NOISE_FLOOR_SAMPLES; ni++) { noise_floor += noise_floor_buffer[ni]; }
+ noise_floor /= NOISE_FLOOR_SAMPLES;
+ }
+ }
+ }
+ #endif
+}
+
void update_modem_status() {
#if MCU_VARIANT == MCU_ESP32
portENTER_CRITICAL(&update_lock);
@@ -1220,6 +1244,7 @@ void update_modem_status() {
void check_modem_status() {
if (millis()-last_status_update >= status_interval_ms) {
update_modem_status();
+ update_noise_floor();
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
util_samples[dcd_sample] = dcd;

diff --git a/Utilities.h b/Utilities.h
index 3b54629..03e4985 100644
--- a/Utilities.h
+++ b/Utilities.h
@@ -752,7 +752,7 @@ void kiss_indicate_stat_tx() {
}
void kiss_indicate_stat_rssi() {
- uint8_t packet_rssi_val = (uint8_t)(last_rssi+rssi_offset);
+ uint8_t packet_rssi_val = (uint8_t)(last_rssi+rssi_offset);
serial_write(FEND);
serial_write(CMD_STAT_RSSI);
escaped_serial_write(packet_rssi_val);
@@ -845,6 +845,8 @@ void kiss_indicate_channel_stats() {
uint16_t atl = (uint16_t)(longterm_airtime*100*100);
uint16_t cls = (uint16_t)(total_channel_util*100*100);
uint16_t cll = (uint16_t)(longterm_channel_util*100*100);
+ uint8_t crs = (uint8_t)(current_rssi+rssi_offset);
+ uint8_t nfl = (uint8_t)(noise_floor+rssi_offset);
serial_write(FEND);
serial_write(CMD_STAT_CHTM);
escaped_serial_write(ats>>8);
@@ -855,6 +857,8 @@ void kiss_indicate_channel_stats() {
escaped_serial_write(cls);
escaped_serial_write(cll>>8);
escaped_serial_write(cll);
+ escaped_serial_write(crs);
+ escaped_serial_write(nfl);
serial_write(FEND);
#endif
}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────